\subsection{Objectif de la passe dynamique}
\begin{frame} \frametitle{Objectif de la passe dynamique}
	\begin{block}{Collecter des Informations au Runtime}
		Obtenir des traces spécifiques à l'Exécution.
		Informations au sujet du temps passé dans une fonction.
		\begin{itemize}
			\item Temps inclusif et exclusif
			\item Agréger les données
		\end{itemize}
	\end{block}
	\begin{block}{Définitions}
		\begin{itemize}
			\item \textbf{Temps inclusif} temps passé dans une fonction y compris le temps passé dans les fonctions appelées depuis cette fonction.
			\item \textbf{Temps exclusif} excepté le temps passé dans les fonctions appelées depuis cette fonction.
		\end{itemize}	
	\end{block}
\end{frame}

\subsection{Librairie dynamique}
\begin{frame}\frametitle{Une librairie dynamique}
	\begin{block}{Mise en place}
		\begin{itemize}
			\item Réalisée en C++ (extern "C", table des symboles)			
			\item \textbf{gettimeofday} timestamps
			\item \textbf{main} repère pour l'ouverture/fermeture du fichier de traces.
		\end{itemize}	
	\end{block}
	\begin{block}{Fonctionnement}
		\begin{itemize}
			\item Mise à disposition de deux fonctions
			\item enter\_function : timestamp d'entrée
			\item exit\_function : timestamp de sortie
			\item Stockage dans des vecteurs
			\item Ecriture de la trace
		\end{itemize}
	\end{block}		
	
\end{frame}

\subsection{Instrumentation du code}
\begin{frame}\frametitle{Instrumentation du code}
	\begin{block}{Objectif}
		Ajouter les appels aux fonctions enter\_function et exit\_function
	\end{block}		
	\begin{block}{Graphe de Flot de Contrôle}
		\begin{itemize}
			\item CFG : Représentation sous forme de graphe des chemins possibles		
			\item Après la passe qui construction le cfg
			\begin{itemize}
				\item Noeuds : Basic Block			
				\item Noeuds spéciaux 
					\begin{itemize}
						\item \textbf{source} ENTRY\_BLOCK\_PTR
						\item \textbf{puits} EXIT\_BLOCK\_PTR
						\end{itemize}
			\end{itemize}
			\item Basic Block composés de statements
			\item Statement composé de noeuds Gimple
		\end{itemize}
	\end{block}
\end{frame}

\subsection{Création d'un appel de fonction}
\begin{frame}[fragile]\frametitle{Création d'un appel de fonction}
	\begin{block}{Création du noeud Gimple}
		\begin{itemize}
			\item tree signature de la fonction
			\item tree paramètre
			\item gimple de type appel de fonction, avec les bons paramètres
		\end{itemize}
	\end{block}
	\begin{block}{Insertion du noeud Gimple}
		\begin{itemize}
			\item Enter\_function : Au bout de chaque arc sortant du bloc d'entrée
			\item Exit\_function : Au bout de chaque arc précédent le bloc de sortie
		\end{itemize}
	\end{block}	
\end{frame}

\subsection{Format de Traces obtenues}
\begin{frame}[fragile]\frametitle{Génération de Traces}
	\begin{block}{Résultat}
	L'exécution de la fonction instrumentée, génère les traces dynamiques.
	\end{block}
	\begin{verbatim}
	Call 0 required 1 function main entry 1386185396049509 exit 
																									1386185396054303
	Call 1 required 1 function A entry 1386185396049597 exit
																									1386185396052093
	...
	\end{verbatim}	
\end{frame}
